package com.tedu.api;


import org.junit.Test;

/**
 * Java面向对象-----不是真的面向对象---八大基础数据类型
 * 创建对象--类【属性、构造器、方法】
 * 8个包装类：针对八大基本数据类型提供对应类【方法上基本互通】
 *          不可改变的类
 * 包装类包位置：Java.lang
 * 八大基本数据类型(不是面向对象)       对应八大基本数据类型对应包装类
 *             int                          Integer  继承Number父类【抽象】
 *             long                         Long    继承Number父类【抽象】
 *             double                       Double   继承Number父类【抽象】
 *             short                        Short   继承Number父类【抽象】
 *             float                        Float   继承Number父类【抽象】
 *             byte                         Byte   继承Number父类【抽象】
 *             char                         Character  继承Object父类
 *             boolean                      Boolean    继承Object父类
 */
public class PackingAPI {
    @Test
    public void test(){
        int a=1;  //不是面向对象，通过【反射】
        //创建int类型对象；Integer构造器  ：引入|直接写
        Integer i=new Integer(a);
        i.toString();
    }

    /**
     * 包装类API
     * xxxValue方法==静态方法valueOf()   返回值：对应数据类型
     * 作用：把包装类转换为基本数据类型的方法
     * 测试：6个包装类
     */
    @Test
    public void testValue(){
        Integer i=new Integer(2);//打包：对应类型放入包装类
       i= i.intValue();  //拆包---接收：int类型和Integer是一样的
        System.out.println(i);
        //测试其他7个包装类
    String s1="123.123";    //Double
        Double a=new Double(123.123);
        a.doubleValue();
        System.out.println(a);
    String s2="123";        //Byte
        Byte b=new Byte(s2);
        b.byteValue();
        System.out.println(b);
    String s3="123.123F";      // Float
        Float c=new Float(123.1F);
        c.byteValue();
        System.out.println(c);
        //包装类构造器：直接传值，【使用字符串传值：Long包装认为L字符，并不是数值】
    String s4="1234L";    // Long
        Long d=new Long(5678L);
        d.longValue();
        System.out.println(d);
        //Long   异常  NumberFormatter[没看完]
    String s5="true";     //Boolean
        Boolean e=new Boolean(s5);
        e.booleanValue();
        System.out.println(e);
        char s6='a';   // Character
        Character F=new Character(s6);
        F.charValue();
        System.out.println(F);






    }
    /**
     * 包装类具备静态方法
     * valueOf()    返回值：对应数据类型
     * 作用：把包装类转换为基本数据类型的方法
     */
    @Test
    public void testValueOf(){
        int i=Integer.valueOf(1);  //打包拆包一体化
        Boolean.valueOf(true);
        char c=Character.valueOf('1');
        Float.valueOf(1.123F);   //1.123默认double   需加F
    }
    /**
     * 包装类-----Servlet【JavaBean===实体类】
     * public class Person{
     *     Integer id;   //成员----解析
     * }
     * parseXXX()   静态方法   返回值：对应类型
     * 作用：获取到字符串转换为对应类型
     */
    @Test
    public void testParseXXX(){
        String s="123";//将字符型转换为整型
        int i=Integer.parseInt(s);  //区别：转换字符串，转换为正确类型
        int id=Integer.valueOf(s);  //区别：存入值，打包拆包的方式获取结果
        System.out.println(i==id);
        //将整形转换为字符串
        String s1=String.valueOf(123);//与包装类，用法一致，实现不一致
        //自己测：
        String s2="456f";
        float a=Float.parseFloat(s2);
        System.out.println(a);
        char s3='a';
       // Character.   没有针对字符的解析
}
/**
 * 自动拆装箱
 * JDK1.5之前没有自动拆装箱
 * JDK1.5自动拆装箱   2004
 *
 */
@Test
    public void testJ(){
  //JDK1.5之前没有自动拆装箱
    Integer in=Integer.valueOf(1);  //装箱
    int ii=in.intValue();//拆箱
    //JDK1.5之后有自动拆装箱
    Integer i=1;
    int is=1;
    //编译器帮我们写了拆装箱过程---JVM虚拟机
}
}




